#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdbool.h>

#define WIDTH 60
#define HEIGHT 20
#define INIT_LENGTH 5

// 全局变量
int snakeX[100], snakeY[100]; // 蛇身坐标
int snakeLength;               // 蛇长度
int foodX, foodY;              // 食物坐标
int direction;                 // 移动方向: 1上 2下 3左 4右
int score;                     // 当前得分
int highestScore;              // 最高分
int speed = 200;               // 游戏速度(毫秒)
bool gameOver;                 // 游戏结束标志

// 函数声明
void printSnakeArt();
void welcomeToGame();
void createMap();
void scoreAndTips();
void readHighestScore();
void writeHighestScore();
void initSnake();
void createFood();
bool biteSelf();
bool hitWall();
void snakeMove();
void keyboardControl();
void gameOverScreen();
void explanation();
void gotoxy(int x, int y);
void hideCursor();
void setColor(int color);

// 主函数
int main() {
    system("mode con cols=80 lines=30"); // 设置控制台窗口大小
    hideCursor();                        // 隐藏光标
    srand((unsigned)time(NULL));         // 随机数种子
    
    welcomeToGame();
    
    return 0;
}

// 打印蛇的字符画
void printSnakeArt() {
    setColor(10); // 绿色
    printf("\n");
    printf("         _________         \n");
    printf("        /         \\       \n");
    printf("       /           \\      \n");
    printf("      /             \\     \n");
    printf("     /               \\    \n");
    printf("    /                 \\   \n");
    printf("   /                   \\  \n");
    printf("  /                     \\ \n");
    printf(" /                       \\\n");
    printf("/_________________________\\\n");
    setColor(7); // 恢复默认颜色
}

// 欢迎界面
void welcomeToGame() {
    system("cls");
    printSnakeArt();
    
    setColor(14); // 黄色
    printf("\n\n       贪吃蛇游戏\n");
    setColor(7);
    printf("\n");
    printf("       1. 开始游戏\n");
    printf("       2. 最高分\n");
    printf("       3. 退出游戏\n");
    printf("\n");
    printf("       请选择(1-3): ");
    
    char choice = _getch();
    switch(choice) {
        case '1':
            // 初始化游戏
            snakeLength = INIT_LENGTH;
            score = 0;
            gameOver = false;
            direction = 4; // 初始向右移动
            
            readHighestScore();
            createMap();
            initSnake();
            createFood();
            scoreAndTips();
            
            // 游戏主循环
            while(!gameOver) {
                keyboardControl();
                snakeMove();
                Sleep(speed);
            }
            
            gameOverScreen();
            break;
        case '2':
            system("cls");
            readHighestScore();
            printf("\n\n       当前最高分: %d\n", highestScore);
            printf("\n       按任意键返回...");
            _getch();
            welcomeToGame();
            break;
        case '3':
            exit(0);
        default:
            welcomeToGame();
    }
}

// 创建游戏地图
void createMap() {
    ...
}

// 显示得分和提示
void scoreAndTips() {
    ...
}

// 从文件读取最高分
void readHighestScore() {
    ...
}

// 写入最高分到文件
void writeHighestScore() {
    ...
}

// 初始化蛇
void initSnake() {
    ...
}

// 创建食物
void createFood() {
   ...
}

// 判断是否咬到自己
bool biteSelf() {
    ...
}

// 判断是否撞墙
bool hitWall() {
    ... 
}

// 蛇移动
void snakeMove() {
    ...
}

// 键盘控制(WASD)
void keyboardControl() {
	...

}

// 游戏结束界面
void gameOverScreen() {
   
}

// 移动光标到指定位置
void gotoxy(int x, int y) {
    COORD pos = {x, y};
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
}

